@echo off
chcp 65001 >nul
setlocal enabledelayedexpansion

echo ========================================
echo        Next.js 项目启动器 (批处理版)
echo ========================================
echo.

REM 检查参数
if "%1"=="--help" goto :help
if "%1"=="-h" goto :help
if "%1"=="--skip-install" set SKIP_INSTALL=1

REM 显示帮助信息
:help
if "%1"=="--help" (
    echo 用法: start.bat [选项]
    echo.
    echo 选项:
    echo   --skip-install    跳过安装步骤，直接启动项目
    echo   --help           显示此帮助信息
    echo.
    echo 示例:
    echo   start.bat              # 完整安装和启动
    echo   start.bat --skip-install # 跳过安装，直接启动
    exit /b 0
)

REM 检查是否以管理员权限运行
net session >nul 2>&1
if %errorLevel% neq 0 (
    echo [警告] 建议以管理员权限运行此脚本以获得最佳体验。
    echo.
)

REM 跳过安装检查
if not defined SKIP_INSTALL (
    echo [信息] 正在检查 Node.js...
    
    REM 检查 Node.js 是否已安装
    node --version >nul 2>&1
    if %errorLevel% equ 0 (
        for /f "tokens=*" %%i in ('node --version') do set NODE_VERSION=%%i
        echo [成功] Node.js 已安装: !NODE_VERSION!
    ) else (
        echo [警告] Node.js 未安装，正在尝试安装...
        
        REM 尝试使用 winget 安装
        winget --version >nul 2>&1
        if %errorLevel% equ 0 (
            echo [信息] 使用 winget 安装 Node.js...
            winget install OpenJS.NodeJS --accept-source-agreements --accept-package-agreements
            if %errorLevel% equ 0 (
                echo [成功] Node.js 安装成功！
                REM 刷新环境变量
                call refreshenv >nul 2>&1
            ) else (
                echo [错误] 使用 winget 安装失败
            )
        ) else (
            REM 尝试使用 Chocolatey 安装
            choco --version >nul 2>&1
            if %errorLevel% equ 0 (
                echo [信息] 使用 Chocolatey 安装 Node.js...
                choco install nodejs -y
                if %errorLevel% equ 0 (
                    echo [成功] Node.js 安装成功！
                    REM 刷新环境变量
                    call refreshenv >nul 2>&1
                ) else (
                    echo [错误] 使用 Chocolatey 安装失败
                )
            ) else (
                echo [错误] 无法自动安装 Node.js。请手动安装：
                echo 1. 访问 https://nodejs.org/
                echo 2. 下载并安装 LTS 版本
                echo 3. 重新运行此脚本
                pause
                exit /b 1
            )
        )
    )
    
    echo.
    echo [信息] 正在检查 pnpm...
    
    REM 检查 pnpm 是否已安装
    pnpm --version >nul 2>&1
    if %errorLevel% equ 0 (
        for /f "tokens=*" %%i in ('pnpm --version') do set PNPM_VERSION=%%i
        echo [成功] pnpm 已安装: !PNPM_VERSION!
    ) else (
        echo [警告] pnpm 未安装，正在安装...
        
        REM 使用 npm 安装 pnpm
        npm --version >nul 2>&1
        if %errorLevel% equ 0 (
            echo [信息] 使用 npm 安装 pnpm...
            npm install -g pnpm
            if %errorLevel% equ 0 (
                echo [成功] pnpm 安装成功！
            ) else (
                echo [错误] pnpm 安装失败
                pause
                exit /b 1
            )
        ) else (
            echo [错误] npm 不可用，无法安装 pnpm
            pause
            exit /b 1
        )
    )
    
    echo.
)

REM 检查项目依赖
echo [信息] 正在检查项目依赖...

if exist package.json (
    if exist node_modules (
        echo [成功] 依赖已安装
    ) else (
        echo [信息] 正在安装项目依赖...
        pnpm install
        if %errorLevel% neq 0 (
            echo [错误] 依赖安装失败！
            pause
            exit /b 1
        )
        echo [成功] 依赖安装完成！
    )
) else (
    echo [错误] 未找到 package.json 文件！
    pause
    exit /b 1
)

echo.
echo [成功] 所有准备工作完成！
echo.

REM 启动 Next.js 项目
echo [信息] 正在启动 Next.js 项目...

REM 检查是否有开发脚本
findstr /C:"\"dev\":" package.json >nul 2>&1
if %errorLevel% equ 0 (
    echo [信息] 启动开发服务器...
    pnpm dev
) else (
    findstr /C:"\"start\":" package.json >nul 2>&1
    if %errorLevel% equ 0 (
        echo [信息] 启动生产服务器...
        pnpm start
    ) else (
        echo [错误] 未找到启动脚本！请检查 package.json 中的 scripts 配置。
        pause
        exit /b 1
    )
)

pause
